﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GenCode128;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

namespace JasRibbonApplicatie.Classes
{
    class StreepjesCode
    {
        // zie commentaar bij GetCharacterFromCodeType() :: unieke beginletters!
        public enum CodeType
        {
            Gebruiker,
            Materiaal,
            Toebehoren
        }

        public const int BARCODE_DEFAULT_LINE_WEIGHT = 2;
        private const string DEFAULT_DIR="barcodeCache/";
        

        internal static string ConvertToStreepjesCode(CodeType codeType, int nummer)
        {
            /* Codes beginnen met een letter van het type
             * gevolgd door een getal van 4 cijfer/letters
             * 1-0 & a-z maakt 36 mogelijkheden per karakter
             * 
             * om gemakzuchtige redenen beperk ik me tot hexadecimaal
             * 1-0 & a-f maakt 16 mogelijkheden per karakter tevens ruimschoots voldoende me dunkt
             * => 16^4 = 65536 mogelijkheden :: kom je wel even toe :-) [Ruben]
             * 
             */
            string code = nummer.ToString("X");
            while (code.Length < 4) 
                code = '0' + code;
            code = GetCharacterFromCodeType(codeType) + code;

            return code;
        }

        private static string GetCharacterFromCodeType(CodeType type)
        {
            // de ToString van bvb. "Gebruiker" is gewoon "Gebruiker" (even getest in ander project) => slim gezien ;)
            return type.ToString().ToLower().First().ToString();
        }

        internal static String getStreepjesCode(string data)
        {
            if (!Directory.Exists(DEFAULT_DIR)) 
                Directory.CreateDirectory(DEFAULT_DIR);
            String filename = DEFAULT_DIR + data + ".png";
            if (!File.Exists(filename))
            {
                System.Drawing.Image img = GenCode128.Code128Rendering.MakeBarcodeImage(data, BARCODE_DEFAULT_LINE_WEIGHT, true);
                img.Save(filename, ImageFormat.Png);
            }
            return filename;
        }
    }
}
